package com.example.message.demo;

import java.util.List;
import org.slf4j.Logger; //日志记录
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {
    private static final Logger log = LoggerFactory.getLogger(UserController.class);

    @Autowired //用来给指定的字段或方法注入所需的外部资源。
    private UserRepository userRepository;

    @GetMapping(path = "/add")
    public @ResponseBody String addNewUser (@RequestParam String username, @RequestParam String password, User user) {
        //@ResponseBody 表示返回的是响应
        user.setUsername(username);
        user.setPassword(password);
        userRepository.save(user);
        log.info(user.toString() + " saved to the repo");
        return "saved";
    }

    /**
     * 登陆方法, 用户输入邮箱和密码, 查询数据库检验是否有该账户,如果有,
     * 返回原先页面 ,登陆成功。
     * @param username 用户名
     * @param password 用户密码
     * @param model Spring MVC中的Model，用来储存经过controller处理后的信息，再由View层渲染
     *         得到前端页面。
     * @return
     */

    @GetMapping(path = "/login")
    public String login (@RequestParam String username, @RequestParam String password, Model model) {
        List<User> users = userRepository.findByUsername(username);
//        return "1";
        //如果数据库中没查到该账号
        if (users == null) {
            log.warn("username does not exits");
            return "用户名不存在";
        }
        else {
            User user = users.get(0);
            if(user.getPassword().equals(password)) {
                //如果账号密码匹配成功
                model.addAttribute("name", user.getUsername());
                log.warn(user.toString() + " login success");

            }
            else {
                model.addAttribute("name", "login failed");
                log.warn(user.toString() + " failed to login");
            }
            return "index";
        }
    }

    /**
     * 查看所有用户的注册信息，按照Spring Boot的设定，以Json的形式输送给用户端。
     * @return
     */

    @GetMapping(path = "/all")
    public @ResponseBody Iterable<User> getAllUsers() {
        return userRepository.findAll();
    }

    @GetMapping(path = "/all1")
    public String getAllUsers1() {
        return "index" ;
    }

    /**
     * 域名的根目录，然后返回的“index”会映射到
     * java/resources/templates/index.html文件。
     * @param username
     * @return
     */
    @GetMapping(path="/")
    public String welcomePage(@RequestParam(name="name", required=false, defaultValue="World")
                                      String username){
        return "index";
    }
}
